#include <iostream>
#include <thread>
#include <future>
#include <chrono>
#include <memory>

int Add(int x,int y)
{
    std::this_thread::sleep_for(std::chrono::seconds(3));
    return x + y;
}

int main()
{
    // 由此可见它并不是一个普通的函数。使用时使用指针去调用它。
    // 为了更加方便的调用当然要用智能指针。
    // std::packaged_task<int(int,int)> task(Add);=
    // task(11,13);

    std::shared_ptr<std::packaged_task<int(int,int)>> ptask(std::make_shared<std::packaged_task<int(int,int)>>(Add));
    std::future<int> fu = ptask->get_future();
    std::thread thr([ptask]()
        {
            (*ptask)(11,13);
        });

    int sum = fu.get();
    std::cout << sum << '\n';

    thr.join();
    
    return 0;
}